{%-macro Class(filetype, resolver, ns, Name, schema) %}
{%-if schema.oneOf is defined -%}
{%-include 'oneof.'+filetype+'.jinja2'-%}
{%-elif schema.allOf is defined -%}
{%-include 'allof.'+filetype+'.jinja2'-%}
{%-elif schema.anyOf is defined -%}
{%-include 'anyof.'+filetype+'.jinja2'-%}
{%-elif '$ref' in schema -%}
// An object representing {{schema['$ref']}} is used in this structure
{# -#}
{%-if filetype == 'hpp' -%}
{%-include 'ref.hpp.jinja2'-%}
{%-endif-%}
{%-elif 'type' not in schema-%}
{%-elif schema.type == 'integer' or schema.type == 'number'-%}
{%-include 'numeric.'+filetype+'.jinja2'-%}
{%-elif schema.type == 'array'-%}
{%-include 'array.'+filetype+'.jinja2'-%}
{%-elif schema.type == 'object'-%}
{%-include 'object.'+filetype+'.jinja2'-%}
{%-elif schema.type == 'boolean'-%}
{%-include 'bool.'+filetype+'.jinja2'-%}
{%-elif schema.type == 'null'-%}
{%-include 'null.'+filetype+'.jinja2'-%}
{%-elif schema.type == 'string' and schema.enum is not defined-%}
{%-if schema.format == 'date-time'-%}
{%-include 'datetime.'+filetype+'.jinja2'-%}
{%-else-%}
{%-include 'string.'+filetype+'.jinja2'-%}
{%-endif-%}
{%-elif schema.type == 'string' and schema.enum is defined-%}
{%-include 'string_enum.'+filetype+'.jinja2'-%}
{%-else-%}
// FIXME: Failed at attempt to generate object for schema of type {{schema.type-}}
{%-endif-%}
{%-endmacro-%}
{%-macro Reference(resolver, ref) %}
{{-resolver.cpp_get_ns_name(ref)-}}
{%-endmacro-%}
